#include "drv_key.h"
#include "drv_systick.h"
void drv_key_init(void)
{
	GPIO_InitTypeDef  GPIO_InitStruct ;
	RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOC,  ENABLE);//开启GPIOE时钟使能
	
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN ;  //选择模式，输入
	
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4 |GPIO_Pin_5 |GPIO_Pin_6;  //找到引脚
	
	GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP ;  //设置上拉下拉，上拉设高电平
	
	GPIO_Init(GPIOE, &GPIO_InitStruct); //按键初始化
	GPIO_SetBits( GPIOE,GPIO_Pin_4) ;
	GPIO_SetBits( GPIOE,GPIO_Pin_5) ;
	GPIO_SetBits( GPIOE,GPIO_Pin_6) ;

	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13 ;//初始化按键4
	GPIO_Init(GPIOC, &GPIO_InitStruct); //按键初始化
	GPIO_SetBits( GPIOC,GPIO_Pin_13) ;
}

extern uint8_t page_flag  ;
uint8_t drv_key_press(void)
{
	static uint8_t prevKeyState = 0;
	uint8_t ret = 0 ;//用于判断按键是否按下，默认没按（0）
	if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)==0)//如果读取输入为低电平（0）结果为真
	{
		drv_systick_delayms(30) ;//预防上面为按键抖动带来的误判
		//判断按键1
		if( GPIO_ReadInputDataBit( GPIOE,  GPIO_Pin_4) == 0 )//按下按键为低电平0
		{
			prevKeyState |= 0x01 ;//设置为1，按键按下
			while( GPIO_ReadInputDataBit( GPIOE, GPIO_Pin_4) == 0 ); //判断是否持续按
		}
		
	}else{
			prevKeyState &= ~0x01 ;
			}

	if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_5)==0)//如果读取输入为低电平（0）结果为真
	{
		drv_systick_delayms(30) ;//预防上面为按键抖动带来的误判
		//判断按键2
		if( GPIO_ReadInputDataBit( GPIOE, GPIO_Pin_5) == 0 )//按下按键为低电平0
		{
			prevKeyState |= 0x02 ;//设置为1，按键按下
			while( GPIO_ReadInputDataBit( GPIOE, GPIO_Pin_5) == 0 );//判断是否持续按
		}
		
	}else{
			prevKeyState &= ~0x02 ;
			}

	if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_6)==0)//如果读取输入为低电平（0）结果为真
	{
		drv_systick_delayms(30) ;//预防上面为按键抖动带来的误判
		//判断按键3
		if( GPIO_ReadInputDataBit( GPIOE, GPIO_Pin_6) == 0 )//按下按键为低电平0
		{
			prevKeyState |= 0x04 ;//设置为1，按键按下
			if(page_flag<1)
			{
				page_flag = 3 ; 
			}
			else
			page_flag--;
			while( GPIO_ReadInputDataBit( GPIOE, GPIO_Pin_6) == 0 );//判断是否持续按
		}
	}else{
			prevKeyState &= ~0x04 ;
			}

	if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)==0)//如果读取输入为低电平（0）结果为真
	{
		drv_systick_delayms(30) ;//预防上面为按键抖动带来的误判
		//判断按键
		if( GPIO_ReadInputDataBit( GPIOC, GPIO_Pin_13) == 0 )//按下按键为低电平0
		{
			prevKeyState |= 0x08 ;//设置为1，按键按下
			if(page_flag>3)
			{
				page_flag = 1 ; 
			}
			else
			page_flag++;
			while( GPIO_ReadInputDataBit( GPIOC, GPIO_Pin_13) == 0 );//判断是否持续按
		}
	}else{
			prevKeyState &= ~0x08 ;
			}
	ret = prevKeyState ;
	return ret ;
}
